{
  "cells": [
    {
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "from keras.optimizers import SGD\n",
        "from keras.regularizers import l2\n",
        "from tensorflow import keras\n",
        "from tensorflow.nn import local_response_normalization\n",
        "from keras.utils import to_categorical\n",
        "import matplotlib.pyplot as plt"
      ],
      "metadata": {
        "id": "Rp9LUn54SUTu"
      },
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "7tTxE8D6bD6g"
      },
      "outputs": [],
      "source": [
        "def tf_example(input_shape, num_classes):\n",
        "    \"\"\"CNN Model from TensorFlow v1.x example.\n",
        "\n",
        "    This is the model referenced on the FedAvg paper.\n",
        "\n",
        "    Reference:\n",
        "    https://web.archive.org/web/20170807002954/https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10.py\n",
        "    \"\"\"\n",
        "    input_shape = tuple(input_shape)\n",
        "\n",
        "    weight_decay = 0.004\n",
        "    model = keras.Sequential(\n",
        "        [\n",
        "            keras.layers.Conv2D(\n",
        "                64,\n",
        "                (5, 5),\n",
        "                padding=\"same\",\n",
        "                activation=\"relu\",\n",
        "                input_shape=input_shape,\n",
        "            ),\n",
        "            keras.layers.MaxPooling2D((3, 3), strides=(2, 2), padding=\"same\"),\n",
        "            keras.layers.Lambda(\n",
        "                local_response_normalization,\n",
        "                arguments={\n",
        "                    \"depth_radius\": 4,\n",
        "                    \"bias\": 1.0,\n",
        "                    \"alpha\": 0.001 / 9.0,\n",
        "                    \"beta\": 0.75,\n",
        "                },\n",
        "            ),\n",
        "            keras.layers.Conv2D(\n",
        "                64,\n",
        "                (5, 5),\n",
        "                padding=\"same\",\n",
        "                activation=\"relu\",\n",
        "            ),\n",
        "            keras.layers.Lambda(\n",
        "                local_response_normalization,\n",
        "                arguments={\n",
        "                    \"depth_radius\": 4,\n",
        "                    \"bias\": 1.0,\n",
        "                    \"alpha\": 0.001 / 9.0,\n",
        "                    \"beta\": 0.75,\n",
        "                },\n",
        "            ),\n",
        "            keras.layers.MaxPooling2D((3, 3), strides=(2, 2), padding=\"same\"),\n",
        "            keras.layers.Flatten(),\n",
        "            keras.layers.Dense(\n",
        "                384, activation=\"relu\", kernel_regularizer=l2(weight_decay)\n",
        "            ),\n",
        "            keras.layers.Dense(\n",
        "                192, activation=\"relu\", kernel_regularizer=l2(weight_decay)\n",
        "            ),\n",
        "            keras.layers.Dense(num_classes, activation=\"softmax\"),\n",
        "        ]\n",
        "    )\n",
        "    optimizer = SGD(learning_rate=0.1)\n",
        "    model.compile(\n",
        "        loss=\"categorical_crossentropy\", optimizer=optimizer, metrics=[\"accuracy\"]\n",
        "    )\n",
        "\n",
        "    return model\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def cifar10(num_classes, input_shape):\n",
        "    \"\"\"Prepare the CIFAR-10.\n",
        "\n",
        "    This method considers CIFAR-10 for creating both train and test sets. The sets are\n",
        "    already normalized.\n",
        "    \"\"\"\n",
        "    print(f\">>> [Dataset] Loading CIFAR-10. {num_classes} | {input_shape}.\")\n",
        "    (x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()\n",
        "    x_train = x_train.astype(\"float32\") / 255\n",
        "    x_test = x_test.astype(\"float32\") / 255\n",
        "    input_shape = x_train.shape[1:]\n",
        "    num_classes = len(np.unique(y_train))\n",
        "\n",
        "    return x_train, y_train, x_test, y_test, input_shape, num_classes"
      ],
      "metadata": {
        "id": "vuQykx1uSXHk"
      },
      "execution_count": 17,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "FMph7H-qbHHR",
        "outputId": "45cf4a68-7054-460e-bcd7-c353338dc387"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            ">>> [Dataset] Loading CIFAR-10. 10 | (32, 32, 3).\n"
          ]
        }
      ],
      "source": [
        "x_train, y_train, x_test, y_test, input_shape,num_classes = cifar10(10, (32,32,3))\n"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "EPOCHS=350\n",
        "BATCH_SIZE=128"
      ],
      "metadata": {
        "id": "AD2qsybwX6uR"
      },
      "execution_count": 19,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "---"
      ],
      "metadata": {
        "id": "531ZRrY2SY85"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "id": "1BO5D4ZBbJJo"
      },
      "outputs": [],
      "source": [
        "model = tf_example(input_shape, num_classes)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "8DMMAgw6bK2C",
        "outputId": "9c1203a2-7152-4c25-dc1c-1c58b1cf8b8b"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/350\n",
            "391/391 [==============================] - 8s 18ms/step - loss: 4.8242 - accuracy: 0.2914\n",
            "Epoch 2/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 3.0276 - accuracy: 0.4814\n",
            "Epoch 3/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 2.1395 - accuracy: 0.5609\n",
            "Epoch 4/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 1.6463 - accuracy: 0.6129\n",
            "Epoch 5/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 1.3656 - accuracy: 0.6504\n",
            "Epoch 6/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 1.1851 - accuracy: 0.6868\n",
            "Epoch 7/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 1.0698 - accuracy: 0.7147\n",
            "Epoch 8/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.9918 - accuracy: 0.7350\n",
            "Epoch 9/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.9465 - accuracy: 0.7551\n",
            "Epoch 10/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.8991 - accuracy: 0.7747\n",
            "Epoch 11/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.8534 - accuracy: 0.7971\n",
            "Epoch 12/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.8305 - accuracy: 0.8111\n",
            "Epoch 13/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.8070 - accuracy: 0.8265\n",
            "Epoch 14/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7805 - accuracy: 0.8434\n",
            "Epoch 15/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7672 - accuracy: 0.8527\n",
            "Epoch 16/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7504 - accuracy: 0.8647\n",
            "Epoch 17/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7418 - accuracy: 0.8715\n",
            "Epoch 18/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7244 - accuracy: 0.8819\n",
            "Epoch 19/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7205 - accuracy: 0.8871\n",
            "Epoch 20/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.7032 - accuracy: 0.8966\n",
            "Epoch 21/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6965 - accuracy: 0.8999\n",
            "Epoch 22/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6998 - accuracy: 0.9026\n",
            "Epoch 23/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6952 - accuracy: 0.9065\n",
            "Epoch 24/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6795 - accuracy: 0.9120\n",
            "Epoch 25/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6913 - accuracy: 0.9100\n",
            "Epoch 26/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6822 - accuracy: 0.9144\n",
            "Epoch 27/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6773 - accuracy: 0.9174\n",
            "Epoch 28/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6885 - accuracy: 0.9155\n",
            "Epoch 29/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6588 - accuracy: 0.9239\n",
            "Epoch 30/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6631 - accuracy: 0.9230\n",
            "Epoch 31/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6819 - accuracy: 0.9193\n",
            "Epoch 32/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6557 - accuracy: 0.9271\n",
            "Epoch 33/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6806 - accuracy: 0.9224\n",
            "Epoch 34/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6525 - accuracy: 0.9299\n",
            "Epoch 35/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6500 - accuracy: 0.9303\n",
            "Epoch 36/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6701 - accuracy: 0.9234\n",
            "Epoch 37/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6627 - accuracy: 0.9297\n",
            "Epoch 38/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6507 - accuracy: 0.9321\n",
            "Epoch 39/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6497 - accuracy: 0.9323\n",
            "Epoch 40/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6593 - accuracy: 0.9304\n",
            "Epoch 41/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6528 - accuracy: 0.9325\n",
            "Epoch 42/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6294 - accuracy: 0.9365\n",
            "Epoch 43/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6596 - accuracy: 0.9304\n",
            "Epoch 44/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6493 - accuracy: 0.9343\n",
            "Epoch 45/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6440 - accuracy: 0.9351\n",
            "Epoch 46/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6233 - accuracy: 0.9392\n",
            "Epoch 47/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6631 - accuracy: 0.9301\n",
            "Epoch 48/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6341 - accuracy: 0.9397\n",
            "Epoch 49/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6440 - accuracy: 0.9351\n",
            "Epoch 50/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6540 - accuracy: 0.9354\n",
            "Epoch 51/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6371 - accuracy: 0.9407\n",
            "Epoch 52/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6464 - accuracy: 0.9373\n",
            "Epoch 53/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6489 - accuracy: 0.9371\n",
            "Epoch 54/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6471 - accuracy: 0.9386\n",
            "Epoch 55/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6342 - accuracy: 0.9414\n",
            "Epoch 56/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6447 - accuracy: 0.9379\n",
            "Epoch 57/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6291 - accuracy: 0.9431\n",
            "Epoch 58/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6447 - accuracy: 0.9376\n",
            "Epoch 59/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6493 - accuracy: 0.9401\n",
            "Epoch 60/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6317 - accuracy: 0.9425\n",
            "Epoch 61/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6179 - accuracy: 0.9450\n",
            "Epoch 62/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6549 - accuracy: 0.9370\n",
            "Epoch 63/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6333 - accuracy: 0.9449\n",
            "Epoch 64/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6345 - accuracy: 0.9409\n",
            "Epoch 65/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6320 - accuracy: 0.9440\n",
            "Epoch 66/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6361 - accuracy: 0.9423\n",
            "Epoch 67/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6285 - accuracy: 0.9444\n",
            "Epoch 68/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6324 - accuracy: 0.9427\n",
            "Epoch 69/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6427 - accuracy: 0.9397\n",
            "Epoch 70/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6429 - accuracy: 0.9436\n",
            "Epoch 71/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6226 - accuracy: 0.9465\n",
            "Epoch 72/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6406 - accuracy: 0.9411\n",
            "Epoch 73/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6197 - accuracy: 0.9470\n",
            "Epoch 74/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6285 - accuracy: 0.9434\n",
            "Epoch 75/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6307 - accuracy: 0.9447\n",
            "Epoch 76/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6243 - accuracy: 0.9465\n",
            "Epoch 77/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6274 - accuracy: 0.9468\n",
            "Epoch 78/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6397 - accuracy: 0.9432\n",
            "Epoch 79/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6282 - accuracy: 0.9468\n",
            "Epoch 80/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6408 - accuracy: 0.9434\n",
            "Epoch 81/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6368 - accuracy: 0.9468\n",
            "Epoch 82/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6158 - accuracy: 0.9499\n",
            "Epoch 83/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6100 - accuracy: 0.9478\n",
            "Epoch 84/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6321 - accuracy: 0.9429\n",
            "Epoch 85/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6260 - accuracy: 0.9477\n",
            "Epoch 86/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6235 - accuracy: 0.9463\n",
            "Epoch 87/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6186 - accuracy: 0.9493\n",
            "Epoch 88/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6155 - accuracy: 0.9481\n",
            "Epoch 89/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6702 - accuracy: 0.9374\n",
            "Epoch 90/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6188 - accuracy: 0.9502\n",
            "Epoch 91/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6410 - accuracy: 0.9439\n",
            "Epoch 92/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6052 - accuracy: 0.9528\n",
            "Epoch 93/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6349 - accuracy: 0.9431\n",
            "Epoch 94/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6216 - accuracy: 0.9486\n",
            "Epoch 95/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6128 - accuracy: 0.9497\n",
            "Epoch 96/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6286 - accuracy: 0.9469\n",
            "Epoch 97/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6095 - accuracy: 0.9515\n",
            "Epoch 98/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6124 - accuracy: 0.9487\n",
            "Epoch 99/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6267 - accuracy: 0.9482\n",
            "Epoch 100/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6323 - accuracy: 0.9459\n",
            "Epoch 101/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6116 - accuracy: 0.9507\n",
            "Epoch 102/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6192 - accuracy: 0.9478\n",
            "Epoch 103/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6229 - accuracy: 0.9482\n",
            "Epoch 104/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6261 - accuracy: 0.9486\n",
            "Epoch 105/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6140 - accuracy: 0.9521\n",
            "Epoch 106/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6256 - accuracy: 0.9476\n",
            "Epoch 107/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6118 - accuracy: 0.9525\n",
            "Epoch 108/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6064 - accuracy: 0.9502\n",
            "Epoch 109/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6161 - accuracy: 0.9487\n",
            "Epoch 110/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6105 - accuracy: 0.9513\n",
            "Epoch 111/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6302 - accuracy: 0.9468\n",
            "Epoch 112/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6022 - accuracy: 0.9534\n",
            "Epoch 113/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5993 - accuracy: 0.9518\n",
            "Epoch 114/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6260 - accuracy: 0.9462\n",
            "Epoch 115/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6026 - accuracy: 0.9538\n",
            "Epoch 116/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6144 - accuracy: 0.9499\n",
            "Epoch 117/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6054 - accuracy: 0.9516\n",
            "Epoch 118/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6122 - accuracy: 0.9504\n",
            "Epoch 119/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6187 - accuracy: 0.9506\n",
            "Epoch 120/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6030 - accuracy: 0.9524\n",
            "Epoch 121/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6078 - accuracy: 0.9513\n",
            "Epoch 122/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6113 - accuracy: 0.9503\n",
            "Epoch 123/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6080 - accuracy: 0.9525\n",
            "Epoch 124/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5991 - accuracy: 0.9539\n",
            "Epoch 125/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5985 - accuracy: 0.9529\n",
            "Epoch 126/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6103 - accuracy: 0.9509\n",
            "Epoch 127/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5947 - accuracy: 0.9557\n",
            "Epoch 128/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5945 - accuracy: 0.9532\n",
            "Epoch 129/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6059 - accuracy: 0.9520\n",
            "Epoch 130/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6076 - accuracy: 0.9517\n",
            "Epoch 131/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6134 - accuracy: 0.9520\n",
            "Epoch 132/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5950 - accuracy: 0.9546\n",
            "Epoch 133/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5881 - accuracy: 0.9557\n",
            "Epoch 134/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6095 - accuracy: 0.9494\n",
            "Epoch 135/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6116 - accuracy: 0.9537\n",
            "Epoch 136/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5860 - accuracy: 0.9554\n",
            "Epoch 137/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6058 - accuracy: 0.9519\n",
            "Epoch 138/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6043 - accuracy: 0.9542\n",
            "Epoch 139/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5921 - accuracy: 0.9556\n",
            "Epoch 140/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5983 - accuracy: 0.9530\n",
            "Epoch 141/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5987 - accuracy: 0.9537\n",
            "Epoch 142/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5983 - accuracy: 0.9544\n",
            "Epoch 143/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5734 - accuracy: 0.9576\n",
            "Epoch 144/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5895 - accuracy: 0.9534\n",
            "Epoch 145/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6068 - accuracy: 0.9519\n",
            "Epoch 146/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5973 - accuracy: 0.9548\n",
            "Epoch 147/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5786 - accuracy: 0.9566\n",
            "Epoch 148/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5833 - accuracy: 0.9547\n",
            "Epoch 149/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6056 - accuracy: 0.9511\n",
            "Epoch 150/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6060 - accuracy: 0.9517\n",
            "Epoch 151/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5907 - accuracy: 0.9567\n",
            "Epoch 152/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5922 - accuracy: 0.9541\n",
            "Epoch 153/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5961 - accuracy: 0.9527\n",
            "Epoch 154/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5878 - accuracy: 0.9580\n",
            "Epoch 155/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5790 - accuracy: 0.9580\n",
            "Epoch 156/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5977 - accuracy: 0.9523\n",
            "Epoch 157/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5968 - accuracy: 0.9540\n",
            "Epoch 158/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5950 - accuracy: 0.9547\n",
            "Epoch 159/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5907 - accuracy: 0.9554\n",
            "Epoch 160/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5817 - accuracy: 0.9560\n",
            "Epoch 161/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5962 - accuracy: 0.9536\n",
            "Epoch 162/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5876 - accuracy: 0.9572\n",
            "Epoch 163/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5818 - accuracy: 0.9558\n",
            "Epoch 164/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5896 - accuracy: 0.9541\n",
            "Epoch 165/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5915 - accuracy: 0.9552\n",
            "Epoch 166/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5928 - accuracy: 0.9555\n",
            "Epoch 167/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5773 - accuracy: 0.9576\n",
            "Epoch 168/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5817 - accuracy: 0.9560\n",
            "Epoch 169/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5817 - accuracy: 0.9563\n",
            "Epoch 170/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5877 - accuracy: 0.9565\n",
            "Epoch 171/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5893 - accuracy: 0.9554\n",
            "Epoch 172/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5946 - accuracy: 0.9543\n",
            "Epoch 173/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5841 - accuracy: 0.9571\n",
            "Epoch 174/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5745 - accuracy: 0.9598\n",
            "Epoch 175/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5715 - accuracy: 0.9580\n",
            "Epoch 176/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5809 - accuracy: 0.9552\n",
            "Epoch 177/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5845 - accuracy: 0.9557\n",
            "Epoch 178/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5720 - accuracy: 0.9591\n",
            "Epoch 179/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5901 - accuracy: 0.9541\n",
            "Epoch 180/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5667 - accuracy: 0.9608\n",
            "Epoch 181/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5857 - accuracy: 0.9552\n",
            "Epoch 182/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5694 - accuracy: 0.9613\n",
            "Epoch 183/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5732 - accuracy: 0.9574\n",
            "Epoch 184/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5861 - accuracy: 0.9562\n",
            "Epoch 185/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5737 - accuracy: 0.9580\n",
            "Epoch 186/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5816 - accuracy: 0.9584\n",
            "Epoch 187/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5566 - accuracy: 0.9602\n",
            "Epoch 188/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5664 - accuracy: 0.9576\n",
            "Epoch 189/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5911 - accuracy: 0.9535\n",
            "Epoch 190/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5742 - accuracy: 0.9595\n",
            "Epoch 191/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5748 - accuracy: 0.9559\n",
            "Epoch 192/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5606 - accuracy: 0.9604\n",
            "Epoch 193/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.6116 - accuracy: 0.9508\n",
            "Epoch 194/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5868 - accuracy: 0.9591\n",
            "Epoch 195/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5400 - accuracy: 0.9650\n",
            "Epoch 196/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5624 - accuracy: 0.9574\n",
            "Epoch 197/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5864 - accuracy: 0.9554\n",
            "Epoch 198/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5773 - accuracy: 0.9585\n",
            "Epoch 199/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5699 - accuracy: 0.9580\n",
            "Epoch 200/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5703 - accuracy: 0.9595\n",
            "Epoch 201/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5723 - accuracy: 0.9601\n",
            "Epoch 202/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5641 - accuracy: 0.9591\n",
            "Epoch 203/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5812 - accuracy: 0.9565\n",
            "Epoch 204/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5653 - accuracy: 0.9612\n",
            "Epoch 205/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5697 - accuracy: 0.9592\n",
            "Epoch 206/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5726 - accuracy: 0.9591\n",
            "Epoch 207/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5570 - accuracy: 0.9612\n",
            "Epoch 208/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5598 - accuracy: 0.9599\n",
            "Epoch 209/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5709 - accuracy: 0.9578\n",
            "Epoch 210/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5836 - accuracy: 0.9563\n",
            "Epoch 211/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5621 - accuracy: 0.9613\n",
            "Epoch 212/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5722 - accuracy: 0.9582\n",
            "Epoch 213/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5483 - accuracy: 0.9624\n",
            "Epoch 214/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5708 - accuracy: 0.9563\n",
            "Epoch 215/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5746 - accuracy: 0.9572\n",
            "Epoch 216/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5840 - accuracy: 0.9584\n",
            "Epoch 217/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5545 - accuracy: 0.9623\n",
            "Epoch 218/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5402 - accuracy: 0.9628\n",
            "Epoch 219/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5546 - accuracy: 0.9591\n",
            "Epoch 220/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5762 - accuracy: 0.9552\n",
            "Epoch 221/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5596 - accuracy: 0.9604\n",
            "Epoch 222/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5548 - accuracy: 0.9610\n",
            "Epoch 223/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5586 - accuracy: 0.9608\n",
            "Epoch 224/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5504 - accuracy: 0.9612\n",
            "Epoch 225/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5496 - accuracy: 0.9607\n",
            "Epoch 226/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5763 - accuracy: 0.9562\n",
            "Epoch 227/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5664 - accuracy: 0.9602\n",
            "Epoch 228/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5404 - accuracy: 0.9648\n",
            "Epoch 229/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5603 - accuracy: 0.9580\n",
            "Epoch 230/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5574 - accuracy: 0.9610\n",
            "Epoch 231/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5575 - accuracy: 0.9586\n",
            "Epoch 232/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5660 - accuracy: 0.9585\n",
            "Epoch 233/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5427 - accuracy: 0.9640\n",
            "Epoch 234/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5468 - accuracy: 0.9611\n",
            "Epoch 235/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5678 - accuracy: 0.9581\n",
            "Epoch 236/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5472 - accuracy: 0.9622\n",
            "Epoch 237/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5561 - accuracy: 0.9601\n",
            "Epoch 238/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5471 - accuracy: 0.9621\n",
            "Epoch 239/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5539 - accuracy: 0.9601\n",
            "Epoch 240/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5492 - accuracy: 0.9619\n",
            "Epoch 241/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5674 - accuracy: 0.9581\n",
            "Epoch 242/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5451 - accuracy: 0.9618\n",
            "Epoch 243/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5280 - accuracy: 0.9646\n",
            "Epoch 244/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5628 - accuracy: 0.9579\n",
            "Epoch 245/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5504 - accuracy: 0.9625\n",
            "Epoch 246/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5284 - accuracy: 0.9647\n",
            "Epoch 247/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5277 - accuracy: 0.9629\n",
            "Epoch 248/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5490 - accuracy: 0.9599\n",
            "Epoch 249/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5582 - accuracy: 0.9601\n",
            "Epoch 250/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5701 - accuracy: 0.9587\n",
            "Epoch 251/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5274 - accuracy: 0.9664\n",
            "Epoch 252/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5343 - accuracy: 0.9618\n",
            "Epoch 253/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5601 - accuracy: 0.9586\n",
            "Epoch 254/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5544 - accuracy: 0.9608\n",
            "Epoch 255/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5447 - accuracy: 0.9631\n",
            "Epoch 256/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5355 - accuracy: 0.9634\n",
            "Epoch 257/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5321 - accuracy: 0.9625\n",
            "Epoch 258/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5554 - accuracy: 0.9593\n",
            "Epoch 259/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5533 - accuracy: 0.9608\n",
            "Epoch 260/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5511 - accuracy: 0.9618\n",
            "Epoch 261/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5180 - accuracy: 0.9667\n",
            "Epoch 262/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5495 - accuracy: 0.9582\n",
            "Epoch 263/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5347 - accuracy: 0.9640\n",
            "Epoch 264/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5289 - accuracy: 0.9639\n",
            "Epoch 265/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5340 - accuracy: 0.9623\n",
            "Epoch 266/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5463 - accuracy: 0.9604\n",
            "Epoch 267/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5383 - accuracy: 0.9639\n",
            "Epoch 268/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5421 - accuracy: 0.9614\n",
            "Epoch 269/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5213 - accuracy: 0.9651\n",
            "Epoch 270/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5470 - accuracy: 0.9599\n",
            "Epoch 271/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5388 - accuracy: 0.9634\n",
            "Epoch 272/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5384 - accuracy: 0.9630\n",
            "Epoch 273/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5326 - accuracy: 0.9638\n",
            "Epoch 274/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5442 - accuracy: 0.9609\n",
            "Epoch 275/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5384 - accuracy: 0.9634\n",
            "Epoch 276/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5302 - accuracy: 0.9627\n",
            "Epoch 277/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5403 - accuracy: 0.9617\n",
            "Epoch 278/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5325 - accuracy: 0.9647\n",
            "Epoch 279/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5370 - accuracy: 0.9619\n",
            "Epoch 280/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5357 - accuracy: 0.9640\n",
            "Epoch 281/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5287 - accuracy: 0.9640\n",
            "Epoch 282/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5315 - accuracy: 0.9613\n",
            "Epoch 283/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5361 - accuracy: 0.9649\n",
            "Epoch 284/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5382 - accuracy: 0.9614\n",
            "Epoch 285/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5313 - accuracy: 0.9637\n",
            "Epoch 286/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5414 - accuracy: 0.9618\n",
            "Epoch 287/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5197 - accuracy: 0.9667\n",
            "Epoch 288/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5287 - accuracy: 0.9613\n",
            "Epoch 289/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5433 - accuracy: 0.9610\n",
            "Epoch 290/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5371 - accuracy: 0.9637\n",
            "Epoch 291/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5274 - accuracy: 0.9636\n",
            "Epoch 292/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5302 - accuracy: 0.9638\n",
            "Epoch 293/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5418 - accuracy: 0.9611\n",
            "Epoch 294/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5264 - accuracy: 0.9648\n",
            "Epoch 295/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5397 - accuracy: 0.9614\n",
            "Epoch 296/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5217 - accuracy: 0.9652\n",
            "Epoch 297/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5193 - accuracy: 0.9648\n",
            "Epoch 298/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5296 - accuracy: 0.9643\n",
            "Epoch 299/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5312 - accuracy: 0.9621\n",
            "Epoch 300/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5321 - accuracy: 0.9632\n",
            "Epoch 301/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5151 - accuracy: 0.9664\n",
            "Epoch 302/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5239 - accuracy: 0.9634\n",
            "Epoch 303/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5264 - accuracy: 0.9640\n",
            "Epoch 304/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5168 - accuracy: 0.9652\n",
            "Epoch 305/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5238 - accuracy: 0.9649\n",
            "Epoch 306/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5178 - accuracy: 0.9635\n",
            "Epoch 307/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5119 - accuracy: 0.9650\n",
            "Epoch 308/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5237 - accuracy: 0.9634\n",
            "Epoch 309/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5284 - accuracy: 0.9635\n",
            "Epoch 310/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5121 - accuracy: 0.9660\n",
            "Epoch 311/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5394 - accuracy: 0.9599\n",
            "Epoch 312/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5048 - accuracy: 0.9697\n",
            "Epoch 313/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5069 - accuracy: 0.9650\n",
            "Epoch 314/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5089 - accuracy: 0.9657\n",
            "Epoch 315/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5242 - accuracy: 0.9627\n",
            "Epoch 316/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5258 - accuracy: 0.9638\n",
            "Epoch 317/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5221 - accuracy: 0.9643\n",
            "Epoch 318/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5045 - accuracy: 0.9666\n",
            "Epoch 319/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5195 - accuracy: 0.9652\n",
            "Epoch 320/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5005 - accuracy: 0.9680\n",
            "Epoch 321/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5238 - accuracy: 0.9615\n",
            "Epoch 322/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5321 - accuracy: 0.9618\n",
            "Epoch 323/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5160 - accuracy: 0.9674\n",
            "Epoch 324/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5245 - accuracy: 0.9628\n",
            "Epoch 325/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5109 - accuracy: 0.9669\n",
            "Epoch 326/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5138 - accuracy: 0.9656\n",
            "Epoch 327/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.4976 - accuracy: 0.9667\n",
            "Epoch 328/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5200 - accuracy: 0.9624\n",
            "Epoch 329/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.4939 - accuracy: 0.9700\n",
            "Epoch 330/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.4973 - accuracy: 0.9646\n",
            "Epoch 331/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5258 - accuracy: 0.9619\n",
            "Epoch 332/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5384 - accuracy: 0.9623\n",
            "Epoch 333/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5265 - accuracy: 0.9655\n",
            "Epoch 334/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5038 - accuracy: 0.9678\n",
            "Epoch 335/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5162 - accuracy: 0.9643\n",
            "Epoch 336/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5066 - accuracy: 0.9665\n",
            "Epoch 337/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5063 - accuracy: 0.9660\n",
            "Epoch 338/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5078 - accuracy: 0.9658\n",
            "Epoch 339/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5310 - accuracy: 0.9632\n",
            "Epoch 340/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.4861 - accuracy: 0.9703\n",
            "Epoch 341/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5143 - accuracy: 0.9631\n",
            "Epoch 342/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5199 - accuracy: 0.9637\n",
            "Epoch 343/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.4992 - accuracy: 0.9685\n",
            "Epoch 344/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5109 - accuracy: 0.9644\n",
            "Epoch 345/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5066 - accuracy: 0.9657\n",
            "Epoch 346/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5142 - accuracy: 0.9651\n",
            "Epoch 347/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5092 - accuracy: 0.9649\n",
            "Epoch 348/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5188 - accuracy: 0.9636\n",
            "Epoch 349/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.5069 - accuracy: 0.9677\n",
            "Epoch 350/350\n",
            "391/391 [==============================] - 7s 18ms/step - loss: 0.4872 - accuracy: 0.9686\n"
          ]
        }
      ],
      "source": [
        "history = model.fit(x_train, to_categorical(y_train, num_classes), epochs=EPOCHS, batch_size=BATCH_SIZE)"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "loss = history.history['loss']\n",
        "epochs = range(1, len(loss) + 1)\n",
        "\n",
        "plt.plot(epochs, loss, 'b', label='Training Loss')\n",
        "plt.title('Training Loss')\n",
        "plt.xlabel('Epochs')\n",
        "plt.ylabel('Loss')\n",
        "plt.legend()\n",
        "plt.show()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "6lrFuQrNRCyv",
        "outputId": "3bc66200-18f3-483e-8c8c-3b44072fe7bb"
      },
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAHHCAYAAACRAnNyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEw0lEQVR4nO3deXhU1f3H8c+EkCGBLCyBhB0BWQUREEEBKwhEpYD4UykqoIUKqNBKq6gsai2i1lq1xbVQkUqVAlIEBVRcEBUUEBARlE22yJaFJUByfn+czoSBTDaSnEnyfj3PPJm5986dc++M3g/fc+69HmOMEQAAQAgKc90AAACAYAgqAAAgZBFUAABAyCKoAACAkEVQAQAAIYugAgAAQhZBBQAAhCyCCgAACFkEFQAAELIIKgDybejQoWrYsGGh3jt58mR5PJ6ibRCAMo+gApQBHo8nX4/ly5e7bqoTQ4cOVZUqVVw3A0AheLjXD1D6vf766wGvX3vtNS1dulQzZ84MmH711VerVq1ahf6cU6dOKSsrS16vt8DvPX36tE6fPq1KlSoV+vMLa+jQoZozZ47S09NL/LMBnJ9w1w0AcP5uueWWgNeff/65li5des70sx07dkxRUVH5/pyKFSsWqn2SFB4ervBw/pcDoGDo+gHKiSuvvFKtW7fWV199pW7duikqKkoPPPCAJOntt9/Wtddeq9q1a8vr9apx48Z69NFHlZmZGbCOs8eobN++XR6PR0899ZReeuklNW7cWF6vVx07dtSqVasC3pvTGBWPx6O77rpL8+fPV+vWreX1etWqVSu9++6757R/+fLl6tChgypVqqTGjRvrxRdfLPJxL2+99Zbat2+vyMhI1ahRQ7fccot2794dsMy+ffs0bNgw1a1bV16vV4mJierXr5+2b9/uX2b16tXq3bu3atSoocjISDVq1Ei33357kbUTKE/45w1Qjhw8eFBJSUm6+eabdcstt/i7gWbMmKEqVarod7/7napUqaIPPvhAEydOVGpqqp588sk81/uvf/1LaWlp+s1vfiOPx6MnnnhC119/vX788cc8qzCffvqp5s6dq1GjRik6OlrPPvusBg4cqJ07d6p69eqSpDVr1qhPnz5KTEzUww8/rMzMTD3yyCOKj48//53yPzNmzNCwYcPUsWNHTZkyRfv379df//pXrVixQmvWrFFcXJwkaeDAgdq4caPuvvtuNWzYUMnJyVq6dKl27tzpf92rVy/Fx8fr/vvvV1xcnLZv3665c+cWWVuBcsUAKHNGjx5tzv7Pu3v37kaSeeGFF85Z/tixY+dM+81vfmOioqLMiRMn/NOGDBliGjRo4H+9bds2I8lUr17dHDp0yD/97bffNpLMf//7X/+0SZMmndMmSSYiIsJs3brVP23dunVGknnuuef80/r27WuioqLM7t27/dO2bNliwsPDz1lnToYMGWIqV64cdP7JkydNzZo1TevWrc3x48f90xcuXGgkmYkTJxpjjDl8+LCRZJ588smg65o3b56RZFatWpVnuwDkja4foBzxer0aNmzYOdMjIyP9z9PS0nTgwAF17dpVx44d03fffZfnem+66SZVrVrV/7pr166SpB9//DHP9/bs2VONGzf2v27Tpo1iYmL8783MzNSyZcvUv39/1a5d279ckyZNlJSUlOf682P16tVKTk7WqFGjAgb7XnvttWrevLneeecdSXY/RUREaPny5Tp8+HCO6/JVXhYuXKhTp04VSfuA8oygApQjderUUURExDnTN27cqAEDBig2NlYxMTGKj4/3D8RNSUnJc73169cPeO0LLcEO5rm91/d+33uTk5N1/PhxNWnS5JzlcppWGDt27JAkNWvW7Jx5zZs398/3er2aOnWqFi9erFq1aqlbt2564okntG/fPv/y3bt318CBA/Xwww+rRo0a6tevn6ZPn66MjIwiaStQ3hBUgHLkzMqJz5EjR9S9e3etW7dOjzzyiP773/9q6dKlmjp1qiQpKysrz/VWqFAhx+kmH1c/OJ/3ujB27Fh9//33mjJliipVqqQJEyaoRYsWWrNmjSQ7QHjOnDlauXKl7rrrLu3evVu333672rdvz+nRQCEQVIBybvny5Tp48KBmzJihMWPG6LrrrlPPnj0DunJcqlmzpipVqqStW7eeMy+naYXRoEEDSdLmzZvPmbd582b/fJ/GjRvr3nvv1ZIlS7RhwwadPHlSf/7znwOWueyyy/TYY49p9erVmjVrljZu3KjZs2cXSXuB8oSgApRzvorGmRWMkydP6u9//7urJgWoUKGCevbsqfnz52vPnj3+6Vu3btXixYuL5DM6dOigmjVr6oUXXgjoolm8eLE2bdqka6+9VpK97syJEycC3tu4cWNFR0f733f48OFzqkEX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da1atcyTTz7pf3369GlTv359069fv6DtPPtzzvT9998bSWbFihX+aQcOHDCRkZHmzTffNMYYc9FFF5nJkyfnuO6+ffuaYcOGBf3sM539WzlTQY7fVFRy4KuocBsLACgfOnToEPA6PT1d48aNU4sWLRQXF6cqVapo06ZNeVZU2rRp439euXJlxcTE+C8ln5OoqCg1btzY/zoxMdG/fEpKivbv369LL73UP79ChQpq3759gbbtTJs2bVJ4eLg6derkn1a9enU1a9ZMmzZtkiTdc889+uMf/6jLL79ckyZN0jfffONfduTIkZo9e7Yuvvhi/eEPf9Bnn31W6LbkF0ElB3T9AED+REVJ6eluHkV5Bf/KlSsHvB43bpzmzZunP/3pT/rkk0+0du1aXXTRRXneMbpixYoBrz0eT643b8xpeVOUfVqF8Otf/1o//vijbr31Vq1fv14dOnTQc889J0lKSkrSjh079Nvf/lZ79uxRjx49ArqqigNBJQe+WxJQUQGA3Hk8UuXKbh7FeXHcFStWaOjQoRowYIAuuugiJSQkaPv27cX3gTmIjY1VrVq1tGrVKv+0zMxMff3114VeZ4sWLXT69Gl98cUX/mkHDx7U5s2b1bJlS/+0evXq6c4779TcuXN177336uWXX/bPi4+P15AhQ/T666/rmWee0UsvvVTo9uQHpyfngK4fACjfmjZtqrlz56pv377yeDyaMGFCrpWR4nL33XdrypQpatKkiZo3b67nnntOhw8fztfl6devX6/o6Gj/a4/Ho7Zt26pfv34aPny4XnzxRUVHR+v+++9XnTp11K9fP0nS2LFjlZSUpAsvvFCHDx/Whx9+qBYtWkiSJk6cqPbt26tVq1bKyMjQwoUL/fOKC0ElB3T9AED59vTTT+v2229Xly5dVKNGDd13331KTU0t8Xbcd9992rdvn2677TZVqFBBI0aMUO/evfN1N+Ju3boFvK5QoYJOnz6t6dOna8yYMbruuut08uRJdevWTYsWLfJ3Q2VmZmr06NH66aefFBMToz59+ugvf/mLJHstmPHjx2v79u2KjIxU165dNXv27KLf8DN4jOvOsPOQmpqq2NhYpaSkKCYmpsjWu2SJ1Lu3dPHF0po1RbZaACj1Tpw4oW3btqlRo0aqVKmS6+aUO1lZWWrRooVuvPFGPfroo66bk6vcfisFOX5TUckB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lZg7154inZBgqzdbtkgXXZQ91mT3bjsAuHdvafJkO27m1VftWUfDhtnTriU75iUiwp6xlJEhHTggNW4s/fe/trvnyitt91JamtSpk11Py5a26iJJtWvbLp7kZPu6Uyd7xtObb0r33GPHv9x0k40TFSrYM5+8XvtZZ+vS5dyzq4Jp0MB2lYWF2a6vvCpNHo/0f/9n1//TT/a177+mP/7Rjg/68svsbfjmG9uFt2qVHQAtSffeK9WoYSs4J0/a5UaNsoOj//pXu08ef9wus2aN9OGHdtD00qW2u+3RR+24pQkT7Nlg/frZgdbvvGOrXt262apaTjIz7W+gZUvbreezfr1td9269to/rscaFbUjR+z3kJRkK4AASh4VFeTb118bs3v3+a8nK8uY55+3VY709Py/b/t2Ww1KSzNm0iRblcjMNObUKWNWrTLmp5/sus/217/aqohkTMeO9jPXrTPmtdeMGTzYVjK6d7cVpVGjjPnvf7MrOKNGGTNtmq0iRUUZM2BAdhUlNtaYJUtsm7xeW+UZNMguv2CBraTUqWPMTTflXLFp0iTvapKvohNsntdrTO3a2a9btDBm2DBbrTl72fvuM6Z588BpjRtnP2/QwJjhw41p186Ytm3tY+JEW9351a+ylxsxwu7z994L/Jzhw4156y1bpXr4YVs5ysiwn9url13H735nzBtvGHP4sDFffmnMXXcZ89ln9ns6fdqYTZuMef99u8yPP577XR47Zsznn9vvdN263H8vhw/n/HvIzQ8/2N+Uz9NPZ2/fihUFWxeAolGQ4zdBBaXW4cM2gBw5kr/l58835vbbjTl0yL7OyDAmJcUexObONeadd7LnGWNDUnJy4DqysrK7cFautAfwZ54xZs8e29V24oQNSr4D4TPPGNOnjzE9exrzz38aM2SInXbwoDEvvmhDxYAB9iD9yivGXHFF9nujo41JSAgMIddcY8z999vHmdPr1DHm5psDA9eZYefsR5cu9u+ZXWsDBmR377Vtm3MwiooyplOnnNcZF2dMpUrZrzt3NuaCCwKXiYy02//QQ8aMHWsD5dndhnffbb/TEyeMefllY2691Zjf/taYp54yJjzcbuezzxqTlGTM99/bkDtihO2e++QTG5g3bbLf0VNP2fX26GHM0aN2Wteu2Z/XtKntuktPN+aXvzTmuuvsOs524oQxM2bY0BPM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mjXT3r179fDDD6tr167asGGD9u3bp4iICMXFxQW8p1atWtq3b5+bBhcz33bl9P375u3bt081a9YMmB8eHq5q1aqVmf3Sp08fXX/99WrUqJF++OEHPfDAA0pKStLKlStVoUKFMrUPsrKyNHbsWF1++eVq3bq1JOXrt79v374cfye+eaVFTtsvSb/61a/UoEED1a5dW998843uu+8+bd68WXPnzpVUNrZ//fr16ty5s06cOKEqVapo3rx5atmypdauXVtuvv9g+0AKvd8AQaWcSkpK8j9v06aNOnXqpAYNGujNN99UZGSkw5bBpZtvvtn//KKLLlKbNm3UuHFjLV++XD169HDYsqI3evRobdiwQZ9++qnrpjgRbPtHjBjhf37RRRcpMTFRPXr00A8//KDGjRuXdDOLRbNmzbR27VqlpKRozpw5GjJkiD766CPXzSpRwfZBy5YtQ+43QNfP/9SoUUMVKlQ4Z3T3/v37lZCQ4KhVJScuLk4XXnihtm7dqoSEBJ08eVJHjhwJWKYs7wvfduX2/SckJCg5OTlg/unTp3Xo0KEyu18uuOAC1ahRQ1u3bpVUdvbBXXfdpYULF+rDDz9U3bp1/dPz89tPSEjI8Xfim1caBNv+nHTq1EmSAn4DpX37IyIi1KRJE7Vv315TpkxR27Zt9de//rXcfP9S8H2QE9e/AYLK/0RERKh9+/Z6//33/dOysrL0/vvvB/TblVXp6en64YcflJiYqPbt26tixYoB+2Lz5s3auXNnmd0XjRo1UkJCQsA2p6am6osvvvBvc+fOnXXkyBF99dVX/mU++OADZWVl+f9DLmt++uknHTx4UImJiZJK/z4wxuiuu+7SvHnz9MEHH6hRo0YB8/Pz2+/cubPWr18fENiWLl2qmJgYf+k8VOW1/TlZu3atJAX8Bkrr9geTlZWljIyMMv/958a3D3Li/DdQ5MNzS7HZs2cbr9drZsyYYb799lszYsQIExcXFzCyuay49957zfLly822bdvMihUrTM+ePU2NGjVMcnKyMcaeole/fn3zwQcfmNWrV5vOnTubzp07O271+UlLSzNr1qwxa9asMZLM008/bdasWWN27NhhjLGnJ8fFxZm3337bfPPNN6Zfv345np7crl0788UXX5hPP/3UNG3atNScmmtM7vsgLS3NjBs3zqxcudJs27bNLFu2zFxyySWmadOm5sSJE/51lOZ9MHLkSBMbG2uWL18ecOrlsWPH/Mvk9dv3nZrZq1cvs3btWvPuu++a+Pj4UnF6al7bv3XrVvPII4+Y1atXm23btpm3337bXHDBBaZbt27+dZTm7TfGmPvvv9989NFHZtu2beabb74x999/v/F4PGbJkiXGmLL9/fvktg9C8TdAUDnLc889Z+rXr28iIiLMpZdeaj7//HPXTSoWN910k0lMTDQRERGmTp065qabbjJbt271zz9+/LgZNWqUqVq1qomKijIDBgwwe/fuddji8/fhhx8aSec8hgwZYoyxpyhPmDDB1KpVy3i9XtOjRw+zefPmgHUcPHjQDBo0yFSpUsXExMSYYcOGmbS0NAdbUzi57YNjx46ZXr16mfj4eFOxYkXToEEDM3z48HOCemneBzltuyQzffp0/zL5+e1v377dJCUlmcjISFOjRg1z7733mlOnTpXw1hRcXtu/c+dO061bN1OtWjXj9XpNkyZNzO9///uAa2gYU3q33xhjbr/9dtOgQQMTERFh4uPjTY8ePfwhxZiy/f375LYPQvE34DHGmKKv0wAAAJw/xqgAAICQRVABAAAhi6ACAABCFkEFAACELIIKAAAIWQQVAAAQsggqAAAgZBFUAJR6Ho9H8+fPd90MAMWAoALgvAwdOlQej+ecR58+fVw3DUAZEO66AQBKvz59+mj69OkB07xer6PWAChLqKgAOG9er1cJCQkBj6pVq0qy3TLTpk1TUlKSIiMjdcEFF2jOnDkB71+/fr2uuuoqRUZGqnr16hoxYoTS09MDlvnHP/6hVq1ayev1KjExUXfddVfA/AMHDmjAgAGKiopS06ZNtWDBAv+8w4cPa/DgwYqPj1dkZKSaNm16TrACEJoIKgCK3YQJEzRw4ECtW7dOgwcP1s0336xNmzZJko4eParevXuratWqWrVqld566y0tW7YsIIhMmzZNo0eP1ogRI7R+/XotWLBATZo0CfiMhx9+WDfeeKO++eYbXXPNNRo8eLAOHTrk//xvv/1Wixcv1qZNmzRt2jTVqFGj5HYAgMIrllsdAig3hgwZYipUqGAqV64c8HjssceMMfaOvXfeeWfAezp16mRGjhxpjDHmpZdeMlWrVjXp6en++e+8844JCwvz37m5du3a5sEHHwzaBknmoYce8r9OT083kszixYuNMcb07dvXDBs2rGg2GECJYowKgPP2i1/8QtOmTQuYVq1aNf/zzp07B8zr3Lmz1q5dK0natGmT2rZtq8qVK/vnX3755crKytLmzZvl8Xi0Z88e9ejRI9c2tGnTxv+8cuXKiomJUXJysiRp5MiRGjhwoL7++mv16tVL/fv3V5cuXQq1rQBKFkEFwHmrXLnyOV0xRSUyMjJfy1WsWDHgtcfjUVZWliQpKSlJO3bs0KJFi7R06VL16NFDo0eP1lNPPVXk7QVQtBijAqDYff755+e8btGihSSpRYsWWrdunY4ePeqfv2LFCoWFhalZs2aKjo5Ww4YN9f77759XG+Lj4zVkyBC9/vrreuaZZ/TSSy+d1/oAlAwqKgDOW0ZGhvbt2xcwLTw83D9g9a233lKHDh10xRVXaNasWfryyy/16quvSpIGDx6sSZMmaciQIZo8ebJ+/vln3X333br11ltVq1YtSdLkyZN15513qmbNmkpKSlJaWppWrFihu+++O1/tmzhxotq3b69WrVopIyNDCxcu9AclAKGNoALgvL377rtKTEwMmNasWTN99913kuwZObNnz9aoUaOUmJioN954Qy1btpQkRUVF6b333tOYMWPUsWNHRUVFaeDAgXr66af96xoyZIhOnDihv/zlLxo3bpxq1KihG264Id/ti4iI0Pjx47V9+3ZFRkaqa9eumj17dhFsOYDi5jHGGNeNAFB2eTwezZs3T/3793fdFAClEGNUAABAyCKoAACAkMUYFQDFit5lAOeDigoAAAhZBBUAABCyCCoAACBkEVQAAEDIIqgAAICQRVABAAAhi6ACAABCFkEFAACELIIKAAAIWf8P2HJWN2E5DGAAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3SRXs6V6bNEX",
        "outputId": "4ed1f452-e232-41a3-caa9-ea01e89369d0"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "313/313 [==============================] - 1s 3ms/step - loss: 1.5913 - accuracy: 0.7413\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[1.5913232564926147, 0.7412999868392944]"
            ]
          },
          "metadata": {},
          "execution_count": 23
        }
      ],
      "source": [
        "model.evaluate(x_test, to_categorical(y_test, num_classes))"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "---"
      ],
      "metadata": {
        "id": "XyPoVUwrRRj5"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "vXA26MZUbOXO"
      },
      "outputs": [],
      "source": [
        "def cnn(input_shape, num_classes):\n",
        "    \"\"\"CNN Model from (McMahan et. al., 2017).\n",
        "\n",
        "    Communication-efficient learning of deep networks from decentralized data\n",
        "    \"\"\"\n",
        "    input_shape = tuple(input_shape)\n",
        "\n",
        "    weight_decay = 0.004\n",
        "    model = keras.Sequential(\n",
        "        [\n",
        "            keras.layers.Conv2D(\n",
        "                64,\n",
        "                (5, 5),\n",
        "                padding=\"same\",\n",
        "                activation=\"relu\",\n",
        "                input_shape=input_shape,\n",
        "            ),\n",
        "            keras.layers.MaxPooling2D((3, 3), strides=(2, 2)),\n",
        "            keras.layers.BatchNormalization(),\n",
        "            keras.layers.Conv2D(\n",
        "                64,\n",
        "                (5, 5),\n",
        "                padding=\"same\",\n",
        "                activation=\"relu\",\n",
        "            ),\n",
        "            keras.layers.BatchNormalization(),\n",
        "            keras.layers.MaxPooling2D((3, 3), strides=(2, 2)),\n",
        "            keras.layers.Flatten(),\n",
        "            keras.layers.Dense(\n",
        "                384, activation=\"relu\", kernel_regularizer=l2(weight_decay)\n",
        "            ),\n",
        "            keras.layers.Dense(\n",
        "                192, activation=\"relu\", kernel_regularizer=l2(weight_decay)\n",
        "            ),\n",
        "            keras.layers.Dense(num_classes, activation=\"softmax\"),\n",
        "        ]\n",
        "    )\n",
        "    optimizer = SGD(learning_rate=0.1)\n",
        "    model.compile(\n",
        "        loss=\"categorical_crossentropy\", optimizer=optimizer, metrics=[\"accuracy\"]\n",
        "    )\n",
        "\n",
        "    return model"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model_cnn = cnn(input_shape, num_classes)"
      ],
      "metadata": {
        "id": "t098yVNYRxPu"
      },
      "execution_count": 25,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "history_cnn = model_cnn.fit(x_train, to_categorical(y_train, num_classes), epochs=350, batch_size=100)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JinRA8quR2mr",
        "outputId": "edc6a49c-3fa4-498d-fbb4-21cb439c9b38"
      },
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/350\n",
            "500/500 [==============================] - 4s 7ms/step - loss: 4.1634 - accuracy: 0.4622\n",
            "Epoch 2/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 2.3282 - accuracy: 0.6234\n",
            "Epoch 3/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 1.5241 - accuracy: 0.6978\n",
            "Epoch 4/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 1.1409 - accuracy: 0.7442\n",
            "Epoch 5/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.9513 - accuracy: 0.7783\n",
            "Epoch 6/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.8526 - accuracy: 0.8004\n",
            "Epoch 7/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7955 - accuracy: 0.8228\n",
            "Epoch 8/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7653 - accuracy: 0.8402\n",
            "Epoch 9/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7479 - accuracy: 0.8540\n",
            "Epoch 10/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7359 - accuracy: 0.8678\n",
            "Epoch 11/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7267 - accuracy: 0.8774\n",
            "Epoch 12/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7274 - accuracy: 0.8839\n",
            "Epoch 13/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7191 - accuracy: 0.8918\n",
            "Epoch 14/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7182 - accuracy: 0.8971\n",
            "Epoch 15/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7166 - accuracy: 0.9014\n",
            "Epoch 16/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7239 - accuracy: 0.9033\n",
            "Epoch 17/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7214 - accuracy: 0.9069\n",
            "Epoch 18/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7103 - accuracy: 0.9122\n",
            "Epoch 19/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7023 - accuracy: 0.9168\n",
            "Epoch 20/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7128 - accuracy: 0.9147\n",
            "Epoch 21/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7064 - accuracy: 0.9197\n",
            "Epoch 22/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7090 - accuracy: 0.9177\n",
            "Epoch 23/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7103 - accuracy: 0.9190\n",
            "Epoch 24/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6981 - accuracy: 0.9232\n",
            "Epoch 25/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7015 - accuracy: 0.9234\n",
            "Epoch 26/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.7026 - accuracy: 0.9253\n",
            "Epoch 27/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6889 - accuracy: 0.9264\n",
            "Epoch 28/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6924 - accuracy: 0.9275\n",
            "Epoch 29/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6818 - accuracy: 0.9303\n",
            "Epoch 30/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6961 - accuracy: 0.9273\n",
            "Epoch 31/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6967 - accuracy: 0.9277\n",
            "Epoch 32/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6932 - accuracy: 0.9318\n",
            "Epoch 33/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6812 - accuracy: 0.9331\n",
            "Epoch 34/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6779 - accuracy: 0.9321\n",
            "Epoch 35/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6898 - accuracy: 0.9312\n",
            "Epoch 36/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6800 - accuracy: 0.9328\n",
            "Epoch 37/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6785 - accuracy: 0.9340\n",
            "Epoch 38/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6713 - accuracy: 0.9370\n",
            "Epoch 39/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6832 - accuracy: 0.9345\n",
            "Epoch 40/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6778 - accuracy: 0.9349\n",
            "Epoch 41/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6610 - accuracy: 0.9378\n",
            "Epoch 42/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6612 - accuracy: 0.9385\n",
            "Epoch 43/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6545 - accuracy: 0.9393\n",
            "Epoch 44/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6609 - accuracy: 0.9369\n",
            "Epoch 45/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6648 - accuracy: 0.9382\n",
            "Epoch 46/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6587 - accuracy: 0.9385\n",
            "Epoch 47/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6492 - accuracy: 0.9420\n",
            "Epoch 48/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6523 - accuracy: 0.9404\n",
            "Epoch 49/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6648 - accuracy: 0.9378\n",
            "Epoch 50/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6571 - accuracy: 0.9397\n",
            "Epoch 51/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6493 - accuracy: 0.9413\n",
            "Epoch 52/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6590 - accuracy: 0.9388\n",
            "Epoch 53/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6542 - accuracy: 0.9412\n",
            "Epoch 54/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6526 - accuracy: 0.9427\n",
            "Epoch 55/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6311 - accuracy: 0.9462\n",
            "Epoch 56/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6459 - accuracy: 0.9412\n",
            "Epoch 57/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6436 - accuracy: 0.9438\n",
            "Epoch 58/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6429 - accuracy: 0.9440\n",
            "Epoch 59/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6459 - accuracy: 0.9421\n",
            "Epoch 60/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6418 - accuracy: 0.9432\n",
            "Epoch 61/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6357 - accuracy: 0.9444\n",
            "Epoch 62/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6316 - accuracy: 0.9452\n",
            "Epoch 63/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6348 - accuracy: 0.9451\n",
            "Epoch 64/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6293 - accuracy: 0.9447\n",
            "Epoch 65/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6339 - accuracy: 0.9453\n",
            "Epoch 66/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6223 - accuracy: 0.9482\n",
            "Epoch 67/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6169 - accuracy: 0.9483\n",
            "Epoch 68/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6217 - accuracy: 0.9456\n",
            "Epoch 69/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6262 - accuracy: 0.9456\n",
            "Epoch 70/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6168 - accuracy: 0.9488\n",
            "Epoch 71/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6166 - accuracy: 0.9465\n",
            "Epoch 72/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6248 - accuracy: 0.9458\n",
            "Epoch 73/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6089 - accuracy: 0.9510\n",
            "Epoch 74/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6155 - accuracy: 0.9472\n",
            "Epoch 75/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6207 - accuracy: 0.9480\n",
            "Epoch 76/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6123 - accuracy: 0.9502\n",
            "Epoch 77/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6173 - accuracy: 0.9474\n",
            "Epoch 78/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6020 - accuracy: 0.9510\n",
            "Epoch 79/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5970 - accuracy: 0.9512\n",
            "Epoch 80/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6211 - accuracy: 0.9454\n",
            "Epoch 81/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5945 - accuracy: 0.9522\n",
            "Epoch 82/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6178 - accuracy: 0.9460\n",
            "Epoch 83/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6082 - accuracy: 0.9504\n",
            "Epoch 84/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5934 - accuracy: 0.9522\n",
            "Epoch 85/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5979 - accuracy: 0.9512\n",
            "Epoch 86/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5985 - accuracy: 0.9506\n",
            "Epoch 87/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5924 - accuracy: 0.9520\n",
            "Epoch 88/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5885 - accuracy: 0.9514\n",
            "Epoch 89/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5934 - accuracy: 0.9515\n",
            "Epoch 90/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.6033 - accuracy: 0.9507\n",
            "Epoch 91/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5958 - accuracy: 0.9523\n",
            "Epoch 92/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5970 - accuracy: 0.9505\n",
            "Epoch 93/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5900 - accuracy: 0.9536\n",
            "Epoch 94/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5916 - accuracy: 0.9512\n",
            "Epoch 95/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5955 - accuracy: 0.9519\n",
            "Epoch 96/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5943 - accuracy: 0.9520\n",
            "Epoch 97/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5852 - accuracy: 0.9523\n",
            "Epoch 98/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5784 - accuracy: 0.9533\n",
            "Epoch 99/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5800 - accuracy: 0.9535\n",
            "Epoch 100/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5691 - accuracy: 0.9552\n",
            "Epoch 101/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5720 - accuracy: 0.9531\n",
            "Epoch 102/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5766 - accuracy: 0.9541\n",
            "Epoch 103/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5696 - accuracy: 0.9543\n",
            "Epoch 104/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5753 - accuracy: 0.9538\n",
            "Epoch 105/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5765 - accuracy: 0.9540\n",
            "Epoch 106/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5590 - accuracy: 0.9576\n",
            "Epoch 107/350\n",
            "500/500 [==============================] - 4s 7ms/step - loss: 0.5675 - accuracy: 0.9537\n",
            "Epoch 108/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5797 - accuracy: 0.9523\n",
            "Epoch 109/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5745 - accuracy: 0.9549\n",
            "Epoch 110/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5634 - accuracy: 0.9565\n",
            "Epoch 111/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5626 - accuracy: 0.9556\n",
            "Epoch 112/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5731 - accuracy: 0.9542\n",
            "Epoch 113/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5737 - accuracy: 0.9539\n",
            "Epoch 114/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5690 - accuracy: 0.9557\n",
            "Epoch 115/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5670 - accuracy: 0.9558\n",
            "Epoch 116/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5583 - accuracy: 0.9550\n",
            "Epoch 117/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5479 - accuracy: 0.9570\n",
            "Epoch 118/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5639 - accuracy: 0.9541\n",
            "Epoch 119/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5530 - accuracy: 0.9580\n",
            "Epoch 120/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5579 - accuracy: 0.9562\n",
            "Epoch 121/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5522 - accuracy: 0.9573\n",
            "Epoch 122/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5641 - accuracy: 0.9542\n",
            "Epoch 123/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5519 - accuracy: 0.9582\n",
            "Epoch 124/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5387 - accuracy: 0.9588\n",
            "Epoch 125/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5470 - accuracy: 0.9570\n",
            "Epoch 126/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5583 - accuracy: 0.9545\n",
            "Epoch 127/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5439 - accuracy: 0.9590\n",
            "Epoch 128/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5541 - accuracy: 0.9557\n",
            "Epoch 129/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5357 - accuracy: 0.9598\n",
            "Epoch 130/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5512 - accuracy: 0.9564\n",
            "Epoch 131/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5377 - accuracy: 0.9593\n",
            "Epoch 132/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5414 - accuracy: 0.9568\n",
            "Epoch 133/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5476 - accuracy: 0.9556\n",
            "Epoch 134/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5348 - accuracy: 0.9583\n",
            "Epoch 135/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5451 - accuracy: 0.9572\n",
            "Epoch 136/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5413 - accuracy: 0.9579\n",
            "Epoch 137/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5257 - accuracy: 0.9604\n",
            "Epoch 138/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5314 - accuracy: 0.9585\n",
            "Epoch 139/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5326 - accuracy: 0.9591\n",
            "Epoch 140/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5399 - accuracy: 0.9575\n",
            "Epoch 141/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5402 - accuracy: 0.9588\n",
            "Epoch 142/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5342 - accuracy: 0.9576\n",
            "Epoch 143/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5380 - accuracy: 0.9577\n",
            "Epoch 144/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5313 - accuracy: 0.9587\n",
            "Epoch 145/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5303 - accuracy: 0.9589\n",
            "Epoch 146/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5219 - accuracy: 0.9595\n",
            "Epoch 147/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5418 - accuracy: 0.9567\n",
            "Epoch 148/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5300 - accuracy: 0.9600\n",
            "Epoch 149/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5088 - accuracy: 0.9607\n",
            "Epoch 150/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5319 - accuracy: 0.9577\n",
            "Epoch 151/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5168 - accuracy: 0.9621\n",
            "Epoch 152/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5161 - accuracy: 0.9606\n",
            "Epoch 153/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5109 - accuracy: 0.9618\n",
            "Epoch 154/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5190 - accuracy: 0.9593\n",
            "Epoch 155/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5273 - accuracy: 0.9586\n",
            "Epoch 156/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5093 - accuracy: 0.9630\n",
            "Epoch 157/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5210 - accuracy: 0.9589\n",
            "Epoch 158/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5046 - accuracy: 0.9636\n",
            "Epoch 159/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5142 - accuracy: 0.9598\n",
            "Epoch 160/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5294 - accuracy: 0.9588\n",
            "Epoch 161/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5079 - accuracy: 0.9622\n",
            "Epoch 162/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4972 - accuracy: 0.9635\n",
            "Epoch 163/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5120 - accuracy: 0.9601\n",
            "Epoch 164/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5091 - accuracy: 0.9624\n",
            "Epoch 165/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5115 - accuracy: 0.9612\n",
            "Epoch 166/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5071 - accuracy: 0.9614\n",
            "Epoch 167/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5067 - accuracy: 0.9628\n",
            "Epoch 168/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5002 - accuracy: 0.9623\n",
            "Epoch 169/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5094 - accuracy: 0.9602\n",
            "Epoch 170/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5032 - accuracy: 0.9618\n",
            "Epoch 171/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5024 - accuracy: 0.9618\n",
            "Epoch 172/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4839 - accuracy: 0.9649\n",
            "Epoch 173/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4931 - accuracy: 0.9620\n",
            "Epoch 174/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5061 - accuracy: 0.9614\n",
            "Epoch 175/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5023 - accuracy: 0.9620\n",
            "Epoch 176/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5021 - accuracy: 0.9625\n",
            "Epoch 177/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4821 - accuracy: 0.9651\n",
            "Epoch 178/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4813 - accuracy: 0.9626\n",
            "Epoch 179/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4906 - accuracy: 0.9630\n",
            "Epoch 180/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4973 - accuracy: 0.9611\n",
            "Epoch 181/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4970 - accuracy: 0.9629\n",
            "Epoch 182/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4841 - accuracy: 0.9644\n",
            "Epoch 183/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4872 - accuracy: 0.9631\n",
            "Epoch 184/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4845 - accuracy: 0.9647\n",
            "Epoch 185/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4756 - accuracy: 0.9648\n",
            "Epoch 186/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4821 - accuracy: 0.9626\n",
            "Epoch 187/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4819 - accuracy: 0.9633\n",
            "Epoch 188/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.5000 - accuracy: 0.9617\n",
            "Epoch 189/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4783 - accuracy: 0.9652\n",
            "Epoch 190/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4778 - accuracy: 0.9641\n",
            "Epoch 191/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4815 - accuracy: 0.9623\n",
            "Epoch 192/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4892 - accuracy: 0.9640\n",
            "Epoch 193/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4850 - accuracy: 0.9637\n",
            "Epoch 194/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4871 - accuracy: 0.9641\n",
            "Epoch 195/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4739 - accuracy: 0.9651\n",
            "Epoch 196/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4779 - accuracy: 0.9636\n",
            "Epoch 197/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4658 - accuracy: 0.9663\n",
            "Epoch 198/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4821 - accuracy: 0.9623\n",
            "Epoch 199/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4826 - accuracy: 0.9635\n",
            "Epoch 200/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4732 - accuracy: 0.9656\n",
            "Epoch 201/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4790 - accuracy: 0.9648\n",
            "Epoch 202/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4675 - accuracy: 0.9658\n",
            "Epoch 203/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4743 - accuracy: 0.9633\n",
            "Epoch 204/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4667 - accuracy: 0.9653\n",
            "Epoch 205/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4760 - accuracy: 0.9624\n",
            "Epoch 206/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4736 - accuracy: 0.9651\n",
            "Epoch 207/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4744 - accuracy: 0.9636\n",
            "Epoch 208/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4623 - accuracy: 0.9664\n",
            "Epoch 209/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4591 - accuracy: 0.9670\n",
            "Epoch 210/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4700 - accuracy: 0.9645\n",
            "Epoch 211/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4690 - accuracy: 0.9653\n",
            "Epoch 212/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4686 - accuracy: 0.9649\n",
            "Epoch 213/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4546 - accuracy: 0.9667\n",
            "Epoch 214/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4710 - accuracy: 0.9645\n",
            "Epoch 215/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4677 - accuracy: 0.9653\n",
            "Epoch 216/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4796 - accuracy: 0.9629\n",
            "Epoch 217/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4601 - accuracy: 0.9673\n",
            "Epoch 218/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4571 - accuracy: 0.9667\n",
            "Epoch 219/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4652 - accuracy: 0.9648\n",
            "Epoch 220/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4613 - accuracy: 0.9658\n",
            "Epoch 221/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4510 - accuracy: 0.9679\n",
            "Epoch 222/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4689 - accuracy: 0.9653\n",
            "Epoch 223/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4490 - accuracy: 0.9677\n",
            "Epoch 224/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4579 - accuracy: 0.9645\n",
            "Epoch 225/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4465 - accuracy: 0.9682\n",
            "Epoch 226/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4486 - accuracy: 0.9673\n",
            "Epoch 227/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4628 - accuracy: 0.9638\n",
            "Epoch 228/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4438 - accuracy: 0.9689\n",
            "Epoch 229/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4528 - accuracy: 0.9650\n",
            "Epoch 230/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4560 - accuracy: 0.9656\n",
            "Epoch 231/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4532 - accuracy: 0.9670\n",
            "Epoch 232/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4497 - accuracy: 0.9671\n",
            "Epoch 233/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4474 - accuracy: 0.9675\n",
            "Epoch 234/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4517 - accuracy: 0.9672\n",
            "Epoch 235/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4531 - accuracy: 0.9660\n",
            "Epoch 236/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4524 - accuracy: 0.9662\n",
            "Epoch 237/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4423 - accuracy: 0.9669\n",
            "Epoch 238/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4500 - accuracy: 0.9658\n",
            "Epoch 239/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4564 - accuracy: 0.9653\n",
            "Epoch 240/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4247 - accuracy: 0.9709\n",
            "Epoch 241/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4395 - accuracy: 0.9670\n",
            "Epoch 242/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4506 - accuracy: 0.9656\n",
            "Epoch 243/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4332 - accuracy: 0.9697\n",
            "Epoch 244/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4385 - accuracy: 0.9674\n",
            "Epoch 245/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4414 - accuracy: 0.9672\n",
            "Epoch 246/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4494 - accuracy: 0.9664\n",
            "Epoch 247/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4429 - accuracy: 0.9677\n",
            "Epoch 248/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4385 - accuracy: 0.9683\n",
            "Epoch 249/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4283 - accuracy: 0.9697\n",
            "Epoch 250/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4362 - accuracy: 0.9677\n",
            "Epoch 251/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4360 - accuracy: 0.9678\n",
            "Epoch 252/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4337 - accuracy: 0.9684\n",
            "Epoch 253/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4485 - accuracy: 0.9664\n",
            "Epoch 254/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4364 - accuracy: 0.9686\n",
            "Epoch 255/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4394 - accuracy: 0.9681\n",
            "Epoch 256/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4211 - accuracy: 0.9692\n",
            "Epoch 257/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4226 - accuracy: 0.9694\n",
            "Epoch 258/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4358 - accuracy: 0.9669\n",
            "Epoch 259/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4260 - accuracy: 0.9696\n",
            "Epoch 260/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4276 - accuracy: 0.9690\n",
            "Epoch 261/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4286 - accuracy: 0.9683\n",
            "Epoch 262/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4297 - accuracy: 0.9690\n",
            "Epoch 263/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4210 - accuracy: 0.9696\n",
            "Epoch 264/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4301 - accuracy: 0.9681\n",
            "Epoch 265/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4283 - accuracy: 0.9687\n",
            "Epoch 266/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4182 - accuracy: 0.9713\n",
            "Epoch 267/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4202 - accuracy: 0.9681\n",
            "Epoch 268/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4292 - accuracy: 0.9686\n",
            "Epoch 269/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4213 - accuracy: 0.9699\n",
            "Epoch 270/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4239 - accuracy: 0.9688\n",
            "Epoch 271/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4213 - accuracy: 0.9686\n",
            "Epoch 272/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4120 - accuracy: 0.9706\n",
            "Epoch 273/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4196 - accuracy: 0.9697\n",
            "Epoch 274/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4181 - accuracy: 0.9694\n",
            "Epoch 275/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4176 - accuracy: 0.9692\n",
            "Epoch 276/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4199 - accuracy: 0.9693\n",
            "Epoch 277/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4298 - accuracy: 0.9686\n",
            "Epoch 278/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4201 - accuracy: 0.9696\n",
            "Epoch 279/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4046 - accuracy: 0.9715\n",
            "Epoch 280/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4024 - accuracy: 0.9707\n",
            "Epoch 281/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4200 - accuracy: 0.9685\n",
            "Epoch 282/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4064 - accuracy: 0.9710\n",
            "Epoch 283/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3937 - accuracy: 0.9725\n",
            "Epoch 284/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4107 - accuracy: 0.9690\n",
            "Epoch 285/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4096 - accuracy: 0.9709\n",
            "Epoch 286/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4103 - accuracy: 0.9696\n",
            "Epoch 287/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4256 - accuracy: 0.9673\n",
            "Epoch 288/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4131 - accuracy: 0.9715\n",
            "Epoch 289/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3974 - accuracy: 0.9726\n",
            "Epoch 290/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4112 - accuracy: 0.9703\n",
            "Epoch 291/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3966 - accuracy: 0.9720\n",
            "Epoch 292/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4136 - accuracy: 0.9687\n",
            "Epoch 293/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4141 - accuracy: 0.9709\n",
            "Epoch 294/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4057 - accuracy: 0.9714\n",
            "Epoch 295/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3946 - accuracy: 0.9728\n",
            "Epoch 296/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4176 - accuracy: 0.9682\n",
            "Epoch 297/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4128 - accuracy: 0.9701\n",
            "Epoch 298/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4058 - accuracy: 0.9712\n",
            "Epoch 299/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3820 - accuracy: 0.9740\n",
            "Epoch 300/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4019 - accuracy: 0.9694\n",
            "Epoch 301/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4020 - accuracy: 0.9713\n",
            "Epoch 302/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4151 - accuracy: 0.9681\n",
            "Epoch 303/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3961 - accuracy: 0.9724\n",
            "Epoch 304/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3941 - accuracy: 0.9709\n",
            "Epoch 305/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3992 - accuracy: 0.9710\n",
            "Epoch 306/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3982 - accuracy: 0.9722\n",
            "Epoch 307/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3842 - accuracy: 0.9727\n",
            "Epoch 308/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4010 - accuracy: 0.9696\n",
            "Epoch 309/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4085 - accuracy: 0.9690\n",
            "Epoch 310/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3894 - accuracy: 0.9731\n",
            "Epoch 311/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4014 - accuracy: 0.9696\n",
            "Epoch 312/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3918 - accuracy: 0.9729\n",
            "Epoch 313/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3906 - accuracy: 0.9708\n",
            "Epoch 314/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3815 - accuracy: 0.9746\n",
            "Epoch 315/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3944 - accuracy: 0.9701\n",
            "Epoch 316/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.4006 - accuracy: 0.9704\n",
            "Epoch 317/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3836 - accuracy: 0.9748\n",
            "Epoch 318/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3836 - accuracy: 0.9722\n",
            "Epoch 319/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3873 - accuracy: 0.9715\n",
            "Epoch 320/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3858 - accuracy: 0.9728\n",
            "Epoch 321/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3900 - accuracy: 0.9710\n",
            "Epoch 322/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3927 - accuracy: 0.9719\n",
            "Epoch 323/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3863 - accuracy: 0.9711\n",
            "Epoch 324/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3857 - accuracy: 0.9726\n",
            "Epoch 325/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3778 - accuracy: 0.9728\n",
            "Epoch 326/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3951 - accuracy: 0.9698\n",
            "Epoch 327/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3871 - accuracy: 0.9726\n",
            "Epoch 328/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3910 - accuracy: 0.9707\n",
            "Epoch 329/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3787 - accuracy: 0.9735\n",
            "Epoch 330/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3874 - accuracy: 0.9707\n",
            "Epoch 331/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3901 - accuracy: 0.9715\n",
            "Epoch 332/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3710 - accuracy: 0.9741\n",
            "Epoch 333/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3874 - accuracy: 0.9715\n",
            "Epoch 334/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3874 - accuracy: 0.9722\n",
            "Epoch 335/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3768 - accuracy: 0.9730\n",
            "Epoch 336/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3739 - accuracy: 0.9738\n",
            "Epoch 337/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3883 - accuracy: 0.9711\n",
            "Epoch 338/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3715 - accuracy: 0.9732\n",
            "Epoch 339/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3740 - accuracy: 0.9730\n",
            "Epoch 340/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3902 - accuracy: 0.9715\n",
            "Epoch 341/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3779 - accuracy: 0.9727\n",
            "Epoch 342/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3883 - accuracy: 0.9708\n",
            "Epoch 343/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3739 - accuracy: 0.9741\n",
            "Epoch 344/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3823 - accuracy: 0.9714\n",
            "Epoch 345/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3729 - accuracy: 0.9736\n",
            "Epoch 346/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3730 - accuracy: 0.9731\n",
            "Epoch 347/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3716 - accuracy: 0.9722\n",
            "Epoch 348/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3841 - accuracy: 0.9722\n",
            "Epoch 349/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3659 - accuracy: 0.9750\n",
            "Epoch 350/350\n",
            "500/500 [==============================] - 3s 7ms/step - loss: 0.3740 - accuracy: 0.9721\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model_cnn.evaluate(x_test, to_categorical(y_test, num_classes))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "eIzsv0QLR_tt",
        "outputId": "0a7eb8e7-4d7f-40ef-e1b0-b3979cc65854"
      },
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "313/313 [==============================] - 1s 2ms/step - loss: 1.4919 - accuracy: 0.7581\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[1.491928219795227, 0.7580999732017517]"
            ]
          },
          "metadata": {},
          "execution_count": 27
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "loss = history_cnn.history['loss']\n",
        "epochs = range(1, len(loss) + 1)\n",
        "\n",
        "plt.plot(epochs, loss, 'b', label='Training Loss')\n",
        "plt.title('Training Loss')\n",
        "plt.xlabel('Epochs')\n",
        "plt.ylabel('Loss')\n",
        "plt.legend()\n",
        "plt.show()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "rOXE49XhSGBy",
        "outputId": "7bf4879e-632d-4762-977f-522402eee644"
      },
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOn0lEQVR4nO3dd3hUZeL28XsSkiGBJISSAoQisPQmNaCAgkJgWUB2VcQlYFsQXLDsKlZA3eBiF0VZlawFWeEFVASRIiC9CApIEUWCkgQRkhBKCMl5/3h+GRhSCTM5Kd/Pdc2VzKnPORmdm6cdh2VZlgAAAMoJH7sLAAAA4EmEGwAAUK4QbgAAQLlCuAEAAOUK4QYAAJQrhBsAAFCuEG4AAEC5QrgBAADlCuEGAACUK4QbAF43cuRINWjQoFj7Tpo0SQ6Hw7MFAlCuEW6ACszhcBTptWrVKruLaouRI0eqatWqdhcDwGVy8GwpoOL64IMP3N6/9957WrZsmd5//3235TfccIPCw8OLfZ7MzExlZ2fL6XRe9r7nz5/X+fPnVbly5WKfv7hGjhypefPmKT09vcTPDaD4KtldAAD2uf32293eb9y4UcuWLcu1/FKnT59WYGBgkc/j5+dXrPJJUqVKlVSpEv+rAlB0NEsBKFCvXr3UqlUrbdu2TT169FBgYKAeffRRSdInn3yiAQMGqHbt2nI6nWrUqJGefvppZWVluR3j0j43P//8sxwOh55//nnNnDlTjRo1ktPpVKdOnbRlyxa3ffPqc+NwODRu3DgtXLhQrVq1ktPpVMuWLfXFF1/kKv+qVavUsWNHVa5cWY0aNdJbb73l8X48c+fOVYcOHRQQEKCaNWvq9ttv16+//uq2TVJSkkaNGqW6devK6XQqMjJSgwYN0s8//+zaZuvWrerbt69q1qypgIAANWzYUHfccYfHyglUFPxzCEChfv/9d8XExOjWW2/V7bff7mqiio+PV9WqVfXAAw+oatWqWrlypZ588kmlpaVp2rRphR539uzZOnnypP72t7/J4XDo3//+t2666Sb99NNPhdb2rF27VvPnz9e9996roKAgvfrqqxo6dKgSEhJUo0YNSdL27dvVr18/RUZGavLkycrKytKUKVNUq1atK78p/yc+Pl6jRo1Sp06dFBcXp+TkZL3yyitat26dtm/frmrVqkmShg4dqt27d+u+++5TgwYNdPToUS1btkwJCQmu9zfeeKNq1aqlRx55RNWqVdPPP/+s+fPne6ysQIVhAcD/GTt2rHXp/xZ69uxpSbLefPPNXNufPn0617K//e1vVmBgoHX27FnXstjYWKt+/fqu9wcPHrQkWTVq1LCOHz/uWv7JJ59YkqzPPvvMteypp57KVSZJlr+/v3XgwAHXsm+//daSZL322muuZQMHDrQCAwOtX3/91bXshx9+sCpVqpTrmHmJjY21qlSpku/6c+fOWWFhYVarVq2sM2fOuJYvWrTIkmQ9+eSTlmVZ1okTJyxJ1rRp0/I91oIFCyxJ1pYtWwotF4CC0SwFoFBOp1OjRo3KtTwgIMD1+8mTJ3Xs2DFde+21On36tPbu3VvocW+55RaFhoa63l977bWSpJ9++qnQffv06aNGjRq53rdp00bBwcGufbOysrR8+XINHjxYtWvXdm3XuHFjxcTEFHr8oti6dauOHj2qe++9163D84ABA9SsWTN9/vnnksx98vf316pVq3TixIk8j5VTw7No0SJlZmZ6pHxARUW4AVCoOnXqyN/fP9fy3bt3a8iQIQoJCVFwcLBq1arl6oycmppa6HHr1avn9j4n6OQXAAraN2f/nH2PHj2qM2fOqHHjxrm2y2tZcRw6dEiS1LRp01zrmjVr5lrvdDr13HPPacmSJQoPD1ePHj3073//W0lJSa7te/bsqaFDh2ry5MmqWbOmBg0apFmzZikjI8MjZQUqEsINgEJdXEOTIyUlRT179tS3336rKVOm6LPPPtOyZcv03HPPSZKys7MLPa6vr2+ey60izFBxJfvaYcKECdq/f7/i4uJUuXJlPfHEE2revLm2b98uyXSSnjdvnjZs2KBx48bp119/1R133KEOHTowFB24TIQbAMWyatUq/f7774qPj9f48eP1xz/+UX369HFrZrJTWFiYKleurAMHDuRal9ey4qhfv74kad++fbnW7du3z7U+R6NGjfTggw/qyy+/1K5du3Tu3Dm98MILbtt07dpVzz77rLZu3aoPP/xQu3fv1pw5czxSXqCiINwAKJacmpOLa0rOnTunN954w64iufH19VWfPn20cOFCHTlyxLX8wIEDWrJkiUfO0bFjR4WFhenNN990az5asmSJ9uzZowEDBkgy8wKdPXvWbd9GjRopKCjItd+JEydy1Tq1a9dOkmiaAi4TQ8EBFEu3bt0UGhqq2NhY/f3vf5fD4dD7779fqpqFJk2apC+//FLdu3fXmDFjlJWVpenTp6tVq1basWNHkY6RmZmpZ555Jtfy6tWr695779Vzzz2nUaNGqWfPnho2bJhrKHiDBg10//33S5L279+v3r176+abb1aLFi1UqVIlLViwQMnJybr11lslSf/973/1xhtvaMiQIWrUqJFOnjyp//znPwoODlb//v09dk+AioBwA6BYatSooUWLFunBBx/U448/rtDQUN1+++3q3bu3+vbta3fxJEkdOnTQkiVL9NBDD+mJJ55QVFSUpkyZoj179hRpNJdkaqOeeOKJXMsbNWqke++9VyNHjlRgYKCmTp2qhx9+WFWqVNGQIUP03HPPuUZARUVFadiwYVqxYoXef/99VapUSc2aNdPHH3+soUOHSjIdijdv3qw5c+YoOTlZISEh6ty5sz788EM1bNjQY/cEqAh4thSACmfw4MHavXu3fvjhB7uLAsAL6HMDoFw7c+aM2/sffvhBixcvVq9evewpEACvo+YGQLkWGRmpkSNH6qqrrtKhQ4c0Y8YMZWRkaPv27WrSpIndxQPgBfS5AVCu9evXTx999JGSkpLkdDoVHR2tf/3rXwQboByj5gYAAJQr9LkBAADlCuEGAACUKxWuz012draOHDmioKAgORwOu4sDAACKwLIsnTx5UrVr15aPT8F1MxUu3Bw5ckRRUVF2FwMAABTD4cOHVbdu3QK3qXDhJigoSJK5OcHBwTaXBgAAFEVaWpqioqJc3+MFqXDhJqcpKjg4mHADAEAZU5QuJXQoBgAA5QrhBgAAlCuEGwAAUK5UuD43AAB7ZGdn69y5c3YXA6WYv79/ocO8i4JwAwDwunPnzungwYPKzs62uygoxXx8fNSwYUP5+/tf0XEINwAAr7IsS4mJifL19VVUVJRH/mWO8idnkt3ExETVq1fviibaJdwAALzq/PnzOn36tGrXrq3AwEC7i4NSrFatWjpy5IjOnz8vPz+/Yh+H+AwA8KqsrCxJuuKmBpR/OZ+RnM9McRFuAAAlguf5oTCe+owQbgAAQLlCuAEAoIQ0aNBAL7/8cpG3X7VqlRwOh1JSUrxWpvKIcAMAwCUcDkeBr0mTJhXruFu2bNE999xT5O27deumxMREhYSEFOt8RVXeQhSjpTwkI0NKTpZ8fKRCnsQOACjlEhMTXb//73//05NPPql9+/a5llWtWtX1u2VZysrKUqVKhX+l1qpV67LK4e/vr4iIiMvaB9TceMw330j160u9etldEgDAlYqIiHC9QkJC5HA4XO/37t2roKAgLVmyRB06dJDT6dTatWv1448/atCgQQoPD1fVqlXVqVMnLV++3O24lzZLORwOvf322xoyZIgCAwPVpEkTffrpp671l9aoxMfHq1q1alq6dKmaN2+uqlWrql+/fm5h7Pz58/r73/+uatWqqUaNGnr44YcVGxurwYMHF/t+nDhxQiNGjFBoaKgCAwMVExOjH374wbX+0KFDGjhwoEJDQ1WlShW1bNlSixcvdu07fPhw1apVSwEBAWrSpIlmzZpV7LIUBeHGQ3LmpGLyTQAomGVJp07Z87Isz13HI488oqlTp2rPnj1q06aN0tPT1b9/f61YsULbt29Xv379NHDgQCUkJBR4nMmTJ+vmm2/Wd999p/79+2v48OE6fvx4vtufPn1azz//vN5//32tWbNGCQkJeuihh1zrn3vuOX344YeaNWuW1q1bp7S0NC1cuPCKrnXkyJHaunWrPv30U23YsEGWZal///7KzMyUJI0dO1YZGRlas2aNdu7cqeeee85Vu/XEE0/o+++/15IlS7Rnzx7NmDFDNWvWvKLyFMqqYFJTUy1JVmpqqkePu3mzZUmWVb++Rw8LAGXemTNnrO+//946c+aMZVmWlZ5u/n9pxys9/fLLP2vWLCskJMT1/quvvrIkWQsXLix035YtW1qvvfaa6339+vWtl156yfVekvX444+73qenp1uSrCVLlrid68SJE66ySLIOHDjg2uf111+3wsPDXe/Dw8OtadOmud6fP3/eqlevnjVo0KB8y3npeS62f/9+S5K1bt0617Jjx45ZAQEB1scff2xZlmW1bt3amjRpUp7HHjhwoDVq1Kh8z32xSz8rF7uc729qbjyEmhsAqFg6duzo9j49PV0PPfSQmjdvrmrVqqlq1aras2dPoTU3bdq0cf1epUoVBQcH6+jRo/luHxgYqEaNGrneR0ZGurZPTU1VcnKyOnfu7Frv6+urDh06XNa1XWzPnj2qVKmSunTp4lpWo0YNNW3aVHv27JEk/f3vf9czzzyj7t2766mnntJ3333n2nbMmDGaM2eO2rVrp3/+859av359sctSVIQbDyHcAEDRBAZK6en2vDz59IcqVaq4vX/ooYe0YMEC/etf/9LXX3+tHTt2qHXr1oU+Cf3Sxww4HI4CHzCa1/aWJ9vbiuGuu+7STz/9pL/+9a/auXOnOnbsqNdee02SFBMTo0OHDun+++/XkSNH1Lt3b7dmNG8g3HgI4QYAisbhkKpUseflzUmS161bp5EjR2rIkCFq3bq1IiIi9PPPP3vvhHkICQlReHi4tmzZ4lqWlZWlb775ptjHbN68uc6fP69Nmza5lv3+++/at2+fWrRo4VoWFRWl0aNHa/78+XrwwQf1n//8x7WuVq1aio2N1QcffKCXX35ZM2fOLHZ5ioKh4B5CuAGAiq1JkyaaP3++Bg4cKIfDoSeeeKLAGhhvue+++xQXF6fGjRurWbNmeu2113TixIkiPdpg586dCgoKcr13OBxq27atBg0apLvvvltvvfWWgoKC9Mgjj6hOnToaNGiQJGnChAmKiYnRH/7wB504cUJfffWVmjdvLkl68skn1aFDB7Vs2VIZGRlatGiRa523EG48hHADABXbiy++qDvuuEPdunVTzZo19fDDDystLa3Ey/Hwww8rKSlJI0aMkK+vr+655x717dtXvr6+he7bo0cPt/e+vr46f/68Zs2apfHjx+uPf/yjzp07px49emjx4sWuJrKsrCyNHTtWv/zyi4KDg9WvXz+99NJLksxcPRMnTtTPP/+sgIAAXXvttZozZ47nL/wiDsvuhroSlpaWppCQEKWmpio4ONhjx92zR2rRQqpRQzp2zGOHBYAy7+zZszp48KAaNmyoypUr212cCic7O1vNmzfXzTffrKefftru4hSooM/K5Xx/U3PjIdTcAABKg0OHDunLL79Uz549lZGRoenTp+vgwYO67bbb7C5aiaFDsYcQbgAApYGPj4/i4+PVqVMnde/eXTt37tTy5cu93s+lNCk14Wbq1KlyOByaMGFCgdvNnTtXzZo1U+XKldW6dWvX9M52I9wAAEqDqKgorVu3TqmpqUpLS9P69etz9aUp70pFuNmyZYveeustt4mM8rJ+/XoNGzZMd955p7Zv367Bgwdr8ODB2rVrVwmVNH+EGwAASgfbw016erqGDx+u//znPwoNDS1w21deeUX9+vXTP/7xDzVv3lxPP/20rr76ak2fPr2ESps/wg0AFKyCjV9BMXjqM2J7uBk7dqwGDBig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4ea5557TW2+9pV69emnYsGFq27atJOnTTz91NVdVVIQbAADsVawZinv16qVjx44pLS1NoaGhruX33HOPAgMDPVa4sign3PBsKQAA7FGsmpszZ84oIyPDFWwOHTqkl19+Wfv27VNYBZ+W18/P/Dx/3t5yAABQURUr3AwaNEjvvfeeJCklJUVdunTRCy+8oMGDB7ueF1VRVfq/urDMTHvLAQBARVWscPPNN9/o2muvlSTNmzdP4eHhOnTokN577z29+uqrHi1gWZNTc0O4AQDAHsUKN6dPn1ZQUJAk6csvv9RNN90kHx8fde3aVYcOHfJoAcsamqUAALBXscJN48aNtXDhQh0+fFhLly7VjTfeKEk6evSoV560XZbQLAUAgL2KFW6efPJJPfTQQ2rQoIE6d+6s6OhoSaYWp3379h4tYFlDsxQAAPYq1lDwP//5z7rmmmuUmJjomuNGknr37q0hQ4Z4rHBlEc1SAADYq1jhRpIiIiIUERHhejp43bp1K/wEfhLNUgAA2K1YzVLZ2dmaMmWKQkJCVL9+fdWvX1/VqlXT008/rewKPjUvzVIAANirWDU3jz32mN555x1NnTpV3bt3lyStXbtWkyZN0tmzZ/Xss896tJBlCc1SAADYq1jh5r///a/efvtt19PAJalNmzaqU6eO7r333godbmiWAgDAXsVqljp+/LiaNWuWa3mzZs10/PjxKy5UWUazFAAA9ipWuGnbtq2mT5+ea/n06dPVpk2bKy5UWUazFAAA9ipWs9S///1vDRgwQMuXL3fNcbNhwwYdPnxYixcv9mgByxqapQAAsFexam569uyp/fv3a8iQIUpJSVFKSopuuukm7d69W++//76ny1im0CwFAIC9ij3PTe3atXN1HP7222/1zjvvaObMmVdcsLIqp+aGZikAAOxRrJob5I+aGwAA7EW48TDCDQAA9iLceBjNUgAA2Ouy+tzcdNNNBa5PSUm5krKUC9TcAABgr8sKNyEhIYWuHzFixBUVqKwj3AAAYK/LCjezZs3yVjnKDZqlAACwF31uPIyaGwAA7EW48TDCDQAA9rI13MTFxalTp04KCgpSWFiYBg8erH379hW639y5c9WsWTNVrlxZrVu3LlWPfKBZCgAAe9kablavXq2xY8dq48aNWrZsmTIzM3XjjTfq1KlT+e6zfv16DRs2THfeeae2b9+u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zJo/f74lyVqwYIHb+qlTp1ohISHWwoULrW+//db605/+ZDVs2NA6c+aMa5t+/fpZbdu2tTZu3Gh9/fXXVuPGja1hw4aV8JUUX2H3IDY21urXr5/b5+L48eNu25Tle9C3b19r1qxZ1q5du6wdO3ZY/fv3t+rVq2elp6e7tinss3/+/HmrVatWVp8+fazt27dbixcvtmrWrGlNnDjRjku6LEW5/p49e1p3332322cgNTXVtb4sX79lWdann35qff7559b+/futffv2WY8++qjl5+dn7dq1y7Ks8v33z1HYPShtnwHCzRXq3LmzNXbsWNf7rKwsq3bt2lZcXJyNpfKOp556ymrbtm2e61JSUiw/Pz9r7ty5rmV79uyxJFkbNmwooRJ616Vf7NnZ2VZERIQ1bdo017KUlBTL6XRaH330kWVZlvX9999bkqwtW7a4tlmyZInlcDisX3/9tcTK7in5hZtBgwblu095uwdHjx61JFmrV6+2LKton/3FixdbPj4+VlJSkmubGTNmWMHBwVZGRkbJXsAVuvT6Lct8sY0fPz7ffcrT9ecIDQ213n777Qr3979Yzj2wrNL3GaBZ6gqcO3dO27ZtU58+fVzLfHx81KdPH23YsMHGknnPDz/8oNq1a+uqq67S8OHDlZCQIEnatm2bMjMz3e5Fs2bNVK9evXJ7Lw4ePKikpCS3aw4JCVGXLl1c17xhwwZVq1ZNHTt2dG3Tp08f+fj4aNOmTSVeZm9ZtWqVwsLC1LRpU40ZM0a///67a115uwepqamSpOrVq0sq2md/w4YNat26tcLDw13b9O3bV2lpadq9e3cJlv7KXXr9OT788EPVrFlTrVq10sSJE3X69GnXuvJ0/VlZWZozZ45OnTql6OjoCvf3l3Lfgxyl6TNQ4R6c6UnHjh1TVlaW2x9LksLDw7V3716bSuU9Xbp0UXx8vJo2barExERNnjxZ1157rXbt2qWkpCT5+/urWrVqbvuEh4crKSnJngJ7Wc515fX3z1mXlJSksLAwt/WVKlVS9erVy8196devn2666SY1bNhQP/74ox599FHFxMRow4YN8vX1LVf3IDs7WxMmTFD37t3VqlUrSSrSZz8pKSnPz0nOurIir+uXpNtuu03169dX7dq19d133+nhhx/Wvn37NH/+fEnl4/p37typ6OhonT17VlWrVtWCBQvUokUL7dixo8L8/fO7B1Lp+wwQblBkMTExrt/btGmjLl26qH79+vr4448VEBBgY8lgp1tvvdX1e+vWrdWmTRs1atRIq1atUu/evW0smeeNHTtWu3bt0tq1a+0uii3yu/577rnH9Xvr1q0VGRmp3r1768cff1SjRo1Kuphe0bRpU+3YsUOpqamaN2+eYmNjtXr1aruLVaLyuwctWrQodZ8BmqWuQM2aNeXr65urV3xycrIiIiJsKlXJqVatmv7whz/owIEDioiI0Llz55SSkuK2TXm+FznXVdDfPyIiQkePHnVbf/78eR0/frzc3perrrpKNWvW1IEDBySVn3swbtw4LVq0SF999ZXq1q3rWl6Uz35ERESen5OcdWVBftefly5dukiS22egrF+/v7+/GjdurA4dOiguLk5t27bVK6+8UmH+/lL+9yAvdn8GCDdXwN/fXx06dNCKFStcy7Kzs7VixQq3dsjyKj09XT/++KMiIyPVoUMH+fn5ud2Lffv2KSEhodzei4YNGyoiIsLtmtPS0rRp0ybXNUdHRyslJUXbtm1zbbNy5UplZ2e7/uMvb3755Rf9/vvvioyMlFT274FlWRo3bpwWLFiglStXqmHDhm7ri/LZj46O1s6dO91C3rJlyxQcHOyq1i+tCrv+vOzYsUOS3D4DZfX685Odna2MjIxy//cvSM49yIvtnwGPd1GuYObMmWM5nU4rPj7e+v7776177rnHqlatmluP8PLiwQcftFatWmUdPHjQWrdundWnTx+rZs2a1tGjRy3LMsMh69WrZ61cudLaunWrFR0dbUVHR9tc6itz8uRJa/v27db27dstSdaLL75obd++3Tp06JBlWWYoeLVq1axPPvnE+u6776xBgwblORS8ffv21qZNm6y1a9daTZo0KTPDoC2r4Htw8uRJ66GHHrI2bNhgHTx40Fq+fLl19dVXW02aNLHOnj3rOkZZvgdjxoyxQkJCrFWrVrkNcz19+rRrm8I++znDYG+88UZrx44d1hdffGHVqlWrTAwFLuz6Dxw4YE2ZMsXaunWrdfDgQeuTTz6xrrrqKqtHjx6uY5Tl67csy3rkkUes1atXWwcPHrS+++4765FHHrEcDof15ZdfWpZVvv/+OQq6B6XxM0C48YDXXnvNqlevnuXv72917tzZ2rhxo91F8opbbrnFioyMtPz9/a06depYt9xyi3XgwAHX+jNnzlj33nuvFRoaagUGBlpDhgyxEhMTbSzxlfvqq68sSblesbGxlmWZ4eBPPPGEFR4ebjmdTqt3797Wvn373I7x+++/W8OGDbOqVq1qBQcHW6NGjbJOnjxpw9UUT0H34PTp09aNN95o1apVy/Lz87Pq169v3X333bnCfVm+B3lduyRr1qxZrm2K8tn/+eefrZiYGCsgIMCqWbOm9eCDD1qZmZklfDWXr7DrT0hIsHr06GFVr17dcjqdVuPGja1//OMfbnOcWFbZvX7Lsqw77rjDql+/vuXv72/VqlXL6t27tyvYWFb5/vvnKOgelMbPgMOyLMvz9UEAAAD2oM8NAAAoVwg3AACgXCHcAACAcoVwAwAAyhXCDQAAKFcINwAAoFwh3AAAgHKFcAOgQnI4HFq4cKHdxQDgBYQbACVu5MiRcjgcuV79+vWzu2gAyoFKdhcAQMXUr18/zZo1y22Z0+m0qTQAyhNqbgDYwul0KiIiwu0VGhoqyTQZzZgxQzExMQoICNBVV12lefPmue2/c+dOXX/99QoICFCNGjV0zz33KD093W2bd999Vy1btpTT6VRkZKTGjRvntv7YsWMaMmSIAgMD1aRJE3366aeudSdOnNDw4cNVq1YtBQQEqEmTJrnCGIDSiXADoFR64oknNHToUH377bcaPny4br31Vu3Zs0eSdOrUKfXt21ehoaHasmWL5s6dq+XLl7uFlxkzZmjs2LG65557tHPnTn366adq3Lix2zkmT56sm2++Wd9995369++v4cOH6/jx467zf//991qyZIn27NmjGTNmqGbNmiV3AwAUn1cexwkABYiNjbV8fX2tKlWquL2effZZy7LMk6hHjx7ttk+XLl2sMWPGWJZlWTNnzrRCQ0Ot9PR01/rPP//c8vHxcT2RvHbt2tZjjz2WbxkkWY8//rjrfXp6uiXJWrJkiWVZljVw4EBr1KhRnrlgACWKPjcAbHHddddpxowZbsuqV6/u+j06OtptXXR0tHbs2CFJ2rNnj9q2basqVaq41nfv3l3Z2dnat2+fHA6Hjhw5ot69exdYhjZt2rh+r1KlioKDg3X06FFJ0pgxYzR06FB98803uvHGGzV48GB169atWNcKoGQRbgDYokqVKrmaiTwlICCgSNv5+fm5vXc4HMrOzpYkxcTE6NChQ1q8eLGWLVum3r17a+zYsXr++ec9Xl4AnkWfGwCl0saNG3O9b968uSSpefPm+vbbb3Xq1CnX+nXr1snHx0dNmzZVUFCQGjRooBUrVlxRGWrVqqXY2Fh98MEHevnllzVz5swrOh6AkkHNDQBbZGRkKCkpyW1ZpUqVXJ12586dq44dO+qaa67Rhx9+qM2bN+udd96RJA0fPlxPPfWUYmNjNWnSJP3222+677779Ne//lXh4eGSpEmTJmn06NEKCwtTTEyMTp48qXXr1um+++4rUvmefPJJdejQQS1btlRGRoYWLVrkClcASjfCDQBbfPHFF4qMjHRb1rRpU+3du1eSGck0Z84c3XvvvYqMjNRHH32kFi1aSJICAwO1dOlSjR8/Xp06dVJgYKCGDh2qF1980XWs2NhYnT17Vi+99JIeeugh1axZU3/+85+LXD5/f39NnDhRP//8swICAnTttddqzpw5HrhyAN7msCzLsrsQAHAxh8OhBQsWaPDgwXYXBUAZRJ8bAABQrhBuAABAuUKfGwClDq3lAK4ENTcAAKBcIdwAAIByhXADAADKFcINAAAoVwg3AACgXCHcAACAcoVwAwAAyhXCDQAAKFcINwAAoFz5/yAGBPoE3TruAAAAAElFTkSuQmCC\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "dXPARCwlSpqV"
      },
      "execution_count": 28,
      "outputs": []
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "machine_shape": "hm",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}